import java.util.Scanner;

public class day6 {
    /**
     * 小葱的01串
     * https://ac.nowcoder.com/acm/problem/230830
     */
    public static void main2(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        char[] str = in.next().toCharArray();
        // 统计整个字符串中的0,1个数
        int[] sum = new int[2]; // sum[0]为0的个数  sum[1]为1的个数
        for(int i = 0;i < n;i++) {
            sum[str[i] - '0']++;
        }

        // 统计 窗口 中的 0 和 1 的个数
        int[] count = new int[2];
        // 滑动窗口
        int left = 0,right = 0,herf = n / 2;
        int ret = 0;
        while(right < n - 1) { // 减一是为了防止进行重复计算
            // 进窗口
            count[str[right] - '0']++;
            while(right - left + 1 > herf) {
                // 超过长度，出窗口
                count[str[left++] - '0']--;
            }
            // 进行判断是否更新结果
            if(right - left + 1 == herf) {
                // 进行判断 0 和 1的个数是否是整个的一半
                if(count[0] * 2 == sum[0] && count[1] * 2 == sum[1]) {
                    // 这个相当于是两个结果，因为是环形的，这样就可以进行处理环形这个问题了
                    ret += 2;
                }
            }
            right++;
        }
        System.out.println(ret);
    }


    /**
     * DP10 最大子矩阵
     * https://www.nowcoder.com/practice/a5a0b05f0505406ca837a3a76a5419b3?tpId=230&tqId=40416&ru=/exam/oj
     */
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        // dp[i][j]: 表示0,0 ~ i,j 位置区间的子矩阵的和
        int[][] dp = new int[101][101];

        // 存储dp
        for(int i = 1;i <= n;i++) {
            for(int j = 1;j <= n;j++) {
                int x = in.nextInt();
                dp[i][j] = dp[i - 1][j] + dp[i][j - 1] - dp[i - 1][j - 1] + x;
            }
        }

        // 取dp值
        int ret = -128;
        for(int x1 = 1;x1 <= n;x1++) {
            for(int y1 = 1;y1 <= n;y1++) {
                for(int x2 = x1;x2 <= n;x2++) {
                    for(int y2 = y1;y2 <= n;y2++) {
                        ret = Math.max(ret,(dp[x2][y2] - dp[x2][y1 - 1] - dp[x1 - 1][y2] + dp[x1 - 1][y1 - 1]));
                    }
                }
            }
        }
        System.out.println(ret);
    }



    /**
     * JZ79 判断是不是平衡二叉树
     * https://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId=13&tqId=11192&ru=/exam/oj
     */
    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
        public TreeNode(int val) {
            this.val = val;
        }
    }
    public boolean IsBalanced_Solution (TreeNode pRoot) {
        // write code here
        return dfs(pRoot) != -1;
    }

    public int dfs(TreeNode root) {
        if(root == null) {
            return 0;
        }
        int left = dfs(root.left); // 左侧的高度
        if(left == -1) {
            return -1; // 说明左侧的树 不符合平衡二叉树，进行剪枝
        }
        int right = dfs(root.right); // 右侧的高度
        if(right == -1) {
            return -1;
        }
        return Math.abs(left - right) <= 1 ? Math.max(left,right) + 1 : -1;
    }
}
